// 定义包路径，属于驾校模块的web控制器
package com.ruoyi.web.controller.jiaxiao;

// 导入所需的Java工具类
import java.util.List;
// 导入Spring相关注解和类
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
// 导入系统自定义的注解和类
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.JxStudentProgress;
import com.ruoyi.system.service.IJxStudentProgressService;

// 标识该类为REST风格的控制器
@RestController
// 定义请求路径前缀，所有该控制器的接口都以/jiaxiao/progress开头
@RequestMapping("/jiaxiao/progress")
// 继承基础控制器，获得一些通用功能
public class JxStudentProgressController extends BaseController {

    // 自动注入学生进度服务接口的实现类
    @Autowired
    private IJxStudentProgressService service;

    // 方法级别权限控制，只有拥有jiaxiao:progress:list权限的用户才能访问
    @PreAuthorize("@ss.hasPermi('jiaxiao:progress:list')")
    // 定义GET请求的接口路径
    @GetMapping("/list")
    // 处理查询学生进度列表的请求
    public TableDataInfo list(JxStudentProgress query) {
        // 开始分页，从请求参数中获取分页信息
        startPage();
        // 调用服务层方法查询符合条件的学生进度列表
        List<JxStudentProgress> list = service.selectList(query);
        // 将查询结果转换为表格数据格式并返回
        return getDataTable(list);
    }

    // 方法级别权限控制，只有拥有jiaxiao:progress:query权限的用户才能访问
    @PreAuthorize("@ss.hasPermi('jiaxiao:progress:query')")
    // 定义GET请求的接口路径，{id}为路径参数
    @GetMapping("/{id}")
    // 根据ID查询学生进度详情
    public AjaxResult getInfo(@PathVariable Long id) {
        // 调用服务层方法查询指定ID的学生进度，并封装成成功的AjaxResult返回
        return AjaxResult.success(service.selectById(id));
    }

    // 方法级别权限控制，只有拥有jiaxiao:progress:add权限的用户才能访问
    @PreAuthorize("@ss.hasPermi('jiaxiao:progress:add')")
    // 日志注解，记录操作标题和业务类型
    @Log(title = "学习进度", businessType = BusinessType.INSERT)
    // 定义POST请求的接口路径
    @PostMapping
    // 新增学生进度
    public AjaxResult add(@RequestBody JxStudentProgress entity) {
        // 调用服务层方法插入数据，并将结果转换为AjaxResult返回
        return toAjax(service.insert(entity));
    }

    // 方法级别权限控制，只有拥有jiaxiao:progress:edit权限的用户才能访问
    @PreAuthorize("@ss.hasPermi('jiaxiao:progress:edit')")
    // 日志注解，记录操作标题和业务类型
    @Log(title = "学习进度", businessType = BusinessType.UPDATE)
    // 定义PUT请求的接口路径
    @PutMapping
    // 修改学生进度
    public AjaxResult edit(@RequestBody JxStudentProgress entity) {
        // 调用服务层方法更新数据，并将结果转换为AjaxResult返回
        return toAjax(service.update(entity));
    }

    // 方法级别权限控制，只有拥有jiaxiao:progress:remove权限的用户才能访问
    @PreAuthorize("@ss.hasPermi('jiaxiao:progress:remove')")
    // 日志注解，记录操作标题和业务类型
    @Log(title = "学习进度", businessType = BusinessType.DELETE)
    // 定义DELETE请求的接口路径，{ids}为路径参数，支持批量删除
    @DeleteMapping("/{ids}")
    // 删除学生进度
    public AjaxResult remove(@PathVariable Long[] ids) {
        // 调用服务层方法批量删除数据，并将结果转换为AjaxResult返回
        return toAjax(service.deleteByIds(ids));
    }

    // 方法级别权限控制，只有拥有jiaxiao:progress:edit权限的用户才能访问
    @PreAuthorize("@ss.hasPermi('jiaxiao:progress:edit')")
    // 日志注解，记录操作标题和业务类型
    @Log(title = "学习进度加时", businessType = BusinessType.UPDATE)
    // 定义PUT请求的接口路径，{id}为路径参数
    @PutMapping("/addHours/{id}")
    // 为指定学生进度增加学时
    public AjaxResult addHours(@PathVariable Long id, @RequestParam int delta) {
        // 调用服务层方法增加学时，并将结果转换为AjaxResult返回
        return toAjax(service.addHours(id, delta));
    }
}